home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3.2 / Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO / packet / n17jsrc / rwhodump.c < prev    next >
C/C++ Source or Header  |  1991-07-30  |  3KB  |  112 lines

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include "global.h"
  4. #include "mbuf.h"
  5. #include "trace.h"
  6.  
  7. static struct outmp {
  8.     char out_line[9];   /* tty name */
  9.     char out_name[9];   /* user id */
  10.     int32 out_time; /* time on */
  11. };
  12.  
  13. static struct whod {
  14.     char wd_vers;
  15.     char wd_type;
  16.     char wd_fill[2];
  17.     int32  wd_sendtime;
  18.     int32  wd_recvtime;
  19.     char wd_hostname[33];
  20.     int32  wd_loadav[3];
  21.     int32  wd_boottime;
  22.     struct    whoent {
  23.         struct    outmp we_utmp;
  24.         int32  we_idle;
  25.         } wd_we[1024 / sizeof (struct whoent)];
  26. };
  27.  
  28. static int ntohrwhod __ARGS((struct whod *wp,struct mbuf **bpp));
  29.  
  30. void
  31. rwho_dump(fp,bpp)
  32. FILE *fp;
  33. struct mbuf **bpp;
  34. {
  35.     int i;
  36.     int32 t;
  37.     char *cp;
  38.     struct whod rwhod;
  39.     if(bpp == NULLBUFP || *bpp == NULLBUF)
  40.         return;
  41.     fprintf(fp,"RWHO: ");
  42.     if(ntohrwhod(&rwhod,bpp) == -1) {
  43.         fprintf(fp,"bad data\n");
  44.         return;
  45.     }
  46.     if(rwhod.wd_vers != 1)
  47.         fprintf(fp,"version %d  ",rwhod.wd_vers);
  48.     if(rwhod.wd_type != 1)
  49.             fprintf(fp,"type %d  ",rwhod.wd_type);
  50.     cp = ctime(&rwhod.wd_sendtime);
  51.     cp[24] = '\0';
  52.     fprintf(fp,"send %s  ",cp);
  53.     t = rwhod.wd_recvtime;
  54.     if(t / 86400)
  55.         fprintf(fp,"%ld:",t/86400);
  56.     t %= 86400;
  57.     fprintf(fp,"recv %02ld:%02ld\n",t / 3600,(t % 3600)/60);
  58.     fprintf(fp,"      host %s  loadvg %ld %ld %ld  ",rwhod.wd_hostname,
  59.         rwhod.wd_loadav[0],rwhod.wd_loadav[1],
  60.         rwhod.wd_loadav[2]);
  61.         fprintf(fp,"boot %s",ctime(&rwhod.wd_boottime));
  62.     i = 0;
  63.     while(rwhod.wd_we[i].we_utmp.out_line[0] != '\0') {
  64.         fprintf(fp,"      %-12s%-12s",rwhod.wd_we[i].we_utmp.out_name,
  65.         rwhod.wd_we[i].we_utmp.out_line);
  66.         t = rwhod.wd_we[i].we_idle;
  67.         if(t / 86400)
  68.             fprintf(fp,"%ld:",t/86400);
  69.         else
  70.             fprintf(fp,"  ");
  71.         t %= 86400;
  72.         fprintf(fp,"%02ld:%02ld    ",t / 3600, (t % 3600)/60);    
  73.         fprintf(fp,"%s",ctime(&rwhod.wd_we[i].we_utmp.out_time));
  74.         ++i;
  75.     }
  76. }
  77. static int
  78. ntohrwhod(wp,bpp)
  79. struct whod *wp;
  80. struct mbuf **bpp;
  81. {
  82.     int i;
  83.     char wbuf[60];
  84.     if(pullup(bpp,wbuf,60) != 60)
  85.         return -1;
  86.     wp->wd_vers = wbuf[0];
  87.     wp->wd_type = wbuf[1];
  88.     wp->wd_fill[0] = wbuf[2];
  89.     wp->wd_fill[1] = wbuf[3];
  90.     wp->wd_sendtime = get32(&wbuf[4]);
  91.     wp->wd_recvtime = get32(&wbuf[8]);
  92.     memcpy(wp->wd_hostname,&wbuf[12],32);
  93.     wp->wd_hostname[32] = '\0';
  94.     wp->wd_loadav[0] = get32(&wbuf[44]);
  95.     wp->wd_loadav[1] = get32(&wbuf[48]);
  96.     wp->wd_loadav[2] = get32(&wbuf[52]);
  97.     wp->wd_boottime = get32(&wbuf[56]);
  98.     for(i = 0; i < 42; ++i) {
  99.         if(pullup(bpp,wbuf,24) != 24) {
  100.             wp->wd_we[i].we_utmp.out_line[0] = '\0';
  101.             return 0;
  102.         }
  103.         memcpy(wp->wd_we[i].we_utmp.out_line,wbuf,8);
  104.         wp->wd_we[i].we_utmp.out_line[8] = '\0';
  105.         memcpy(wp->wd_we[i].we_utmp.out_name,&wbuf[8],8);
  106.         wp->wd_we[i].we_utmp.out_name[8] = '\0';
  107.         wp->wd_we[i].we_utmp.out_time = get32(&wbuf[16]);
  108.         wp->wd_we[i].we_idle = get32(&wbuf[20]);
  109.     }
  110.     return 0;
  111. }
  112.